package com.ams.studio.xml.annotation;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * 表示的一个交互节点
 * <p>
 * Created by zhongyl on 2015/12/3.
 */
@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
public @interface ContractNode {

    /**
     * 节点路径，要求非空，并且以 / 开头
     **/
    String path();

    /**
     * 如果要取目标节点的属性的值，或生成属性，则需要标注属性的名称。
     *
     * @return
     */
    String attribute() default "";

    /**
     * 映射的节点是否可以不存在，默认值 false 表示节点必需存在
     **/
    boolean optional() default false;

    /**
     * 当用于序列化时，可以标明节点的顺序
     **/
    int order() default Integer.MAX_VALUE;

    /**
     * 内容的格式。当类型为日期时，必需指定格式
     **/
    String format() default "";

    /**
     * 描述容器的子类型，如果其值不是默认值，则标注的属性的类型必需是 List&lt;T&gt;.
     **/
    Class listItemType() default Object.class;

    /**
     * 节点描述，默认值 为空， 表示节点没有描述
     **/
    String description() default "";
}
